import Vue from 'vue'
import VueRouter from 'vue-router'
import { Notification, MessageBox, Message } from 'element-ui'
import { formatTime } from '../untils/index';
import Watermark from '../untils/watermark'
// 导入nprogress
import NProgress from "nprogress";
// 导入nprogress的样式
import "nprogress/nprogress.css";
Vue.use(VueRouter)
// 路由点击重复事件
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
function routerCom(path) { //对路由的component解析
  return (resolve) => require([`../views/${path}`], resolve);
}
// 对子路由
function routerChildren(children) { //对子路由的component解析
  children.forEach(v => {
    v.component = routerCom(v.component);
    if (v.children != undefined) {
      v.children = routerChildren(v.children)
    }
  })
  return children
}
// 路由数组
let routeList = [{
  path: '/',
  name: 'Login',
  meta: '登录页',
  component: 'Login'
},
{
  path: '/noparty',
  meta: '无权限',
  component: 'noparty'
},
{
  path: '*',
  meta: '404',
  component: '404'
},
]
// 获取是否vip
let isadmin = localStorage.getItem('identity')
if (isadmin == null) {
  routeList.forEach((v, i) => {
    v.meta = { title: routeList[i].meta }
    v.component = routerCom(v.component)
  });
} else {
  routeList = JSON.parse(localStorage.getItem('adminroute'))
  routeList.forEach((v, i) => {
    if (v.children) {
      v.meta = { requireAuth: routeList[i].meta }
      v.component = routerCom(v.component)
      v.children = routerChildren(v.children)

    } else {
      // console.log('222');
      v.meta = { title: routeList[i].meta }
      v.component = routerCom(v.component)
    }
  })
}
const routes = routeList
const router = new VueRouter({
  // 路由模式
  // 有两种模式：hash模式（默认） 和 history模式
  // hash模式，使用的是锚链接的原理实现路由的跳转，这种方式兼容性非常好；缺点是路径带有#号，不够美观。
  // history模式，使用的是浏览器中内置的history对象实现路由的跳转，这种方式不兼容老版本的浏览器，刷新后会丢失路由信息。
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})
// 1.路由前置守卫--路由跳转之前
//控制登录 验证才能进入页面
router.beforeEach((to, from, next) => {
  // console.log('to',to.meta);
  // console.log('from',from);
  NProgress.start();

  if (to.meta == 'true') {  // 判断该路由是否需要登录权限

    if (localStorage.getItem('token')) { //判断本地是否存在access_token
      next();
    } else {

      if (to.path === '/') {
        next();
      } else {
        MessageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          next({
            path: '/'
          })
        })

      }
    }
  } else {
    next()
  }
  // 权限管理
  // if (to.meta && to.meta.permission) {
  //   if (to.meta.permission.includes(localStorage.getItem('loginUsername'))) {
  //     next()
  //   } else {
  //     next({
  //       path: '/areaDetail/noparty'
  //     })
  //   }
  // } else {
  //   next();
  // }

  if (to.fullPath == "/") {

    if (localStorage.getItem('loginUsername') && localStorage.getItem('loginPwd')) {
      next({
        path: "/areaDetail"
      });
    } else {
      next();
    }
  }


})
// 2.路由后置守卫--路由跳转完成
router.afterEach((to, from) => {

  // 通常：在这里会做一些页面的修改操作
  document.title = '汤汤管理系统';
  if (to.path != '/') {
    let name = localStorage.getItem('loginUsername')
    Watermark.set(name + formatTime(new Date(), 'yyyy-MM-dd  HH:mm:ss'))
  } else {

    Watermark.set('汤汤管理系统' + formatTime(new Date(), 'yyyy-MM-dd  HH:mm:ss'))
  }
  NProgress.done();
})
export default router
